package com.suoluo.zenadmin.common.config;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.springframework.core.io.Resource;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public final class SystemConfigHolder {

	private static SystemConfig configHolder;

	public static SystemConfig createConfigHolder(Resource springResource)
			throws Exception {

		Properties p = loadProperties(springResource.getFile());
		configHolder = new SystemConfigImpl(p);
		return configHolder;
	}

	/**
	 * 获取图片的保存路径
	 * 
	 * @return
	 */
	public static String getImgPath() {
		return configHolder.getString("img.path",
				"http://192.168.1.109:8080/zenapp/upload/images/");
	}

	public static Properties loadProperties(File f) {
		Properties props = new Properties();
		if (f == null || false == f.isFile()) {
			return props;
		}
		InputStream fis = null;
		try {
			fis = new FileInputStream(f);
			props.load(fis);
		} catch (Exception e) {

		} finally {
			if (fis != null) {
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return props;
	}

	/**
	 * 获取目的地特色类别：景点
	 */
	public static int getDestFeatureCategoryForViewpoint() {
		return configHolder.getInt("destFeatureCategoryViewpoint", 1);
	}

	/**
	 * 获取目的地特色类别：住宿
	 */
	public static int getDestFeatureCategoryForHotel() {
		return configHolder.getInt("destFeatureCategoryHotel", 3);
	}

	/**
	 * 获取酒店资源的的概述类型
	 */
	public static int getHotelResourceOutlineType() {
		return configHolder.getInt("hotelResourceOutline", 1);
	}

	/**
	 * 获取图片上传的根目录
	 */
	public static String getUploadImageRoot() {
		return configHolder.getString("upload_img_root", "/upload/images");
	}

	/**
	 * 获取图片上传的相对根目录，即没有“/”
	 */
	public static String getRelativeUploadImageRoot() {
		String root = getUploadImageRoot();
		if (root.startsWith("/")) {
			root = root.substring(1);
		}
		return root;
	}

	/**
	 * 获取mini小图片的前缀
	 */
	public static String getMiniImgPreffix() {
		return configHolder.getString("mini_img_preffix", "mini");
	}

	public static int getSystemImgBlockWidth() {
		return configHolder.getInt("isc_system_image_block_width", 235);
	}

	public static int getSystemImgBlockHeight() {
		return configHolder.getInt("isc_system_image_block_height", 180);
	}

	/**
	 * 获取酒店资源的导航小图的宽度
	 */
	public static int getHotelResourceNavImgWidth() {
		return configHolder
				.getInt("isc_hotel_resource_navigate_img_width", 170);
	}

	/**
	 * 获取酒店资源的导航小图的高度
	 */
	public static int getHotelResourceNavImgHeight() {

		return configHolder
				.getInt("isc_hotel_resource_navigate_img_heiggt", 85);
	}

	/**
	 * 获取数据库查询展示150个字的配置项
	 */
	public static int getAdminContentLimit() {
		return configHolder.getInt("isc_amdin_content_limit", 150);
	}

	/**
	 * 获取系统展示在前台中，每个图块的内容最大限制长度54
	 */
	public static int getImageBlockContentLimit() {
		return configHolder.getInt("isc_image_block_content_limit", 54);
	}

	/**
	 * 前台新闻每页展示的新闻数目
	 */
	public static int getNewsPageSize() {
		return configHolder.getInt("isc_news_page_size", 5);
	}

	/**
	 * 查询推荐的数量4条
	 */
	public static int getRecommendSize() {
		return configHolder.getInt("isc_recommend_size", 4);
	}

	/**
	 * 获取新闻没有小图片展示的默认图片1
	 */
	public static String getNewsDefaultImg1() {
		return configHolder.getString("news_default_img1");
	}

	/**
	 * 获取新闻没有小图片展示的默认图片2
	 */
	public static String getNewsDefaultImg2() {
		return configHolder.getString("news_default_img2");
	}

	/**
	 * 展示即将到来的活动数量
	 */
	public static int getUpcomingDestActivitySize() {
		return configHolder.getInt("isc_upcoming_dest_activity_size", 2);
	}

	/**
	 * 获取新闻列表的内容的最大长度
	 */
	public static int getNewsListContentLimit() {
		return configHolder.getInt("isc_news_list_content_limit", 150);
	}

	/**
	 * 首页展示的新闻类型
	 * 
	 * @return
	 */
	public static int getHomeNewsType() {
		return configHolder.getInt("home_news_type", 1);
	}

	/**
	 * 首页展示的目的地类型
	 * 
	 * @return
	 */
	public static int getHomeDestType() {
		return configHolder.getInt("home_dest_type", 2);
	}

	/**
	 * 首页展示的酒店类型
	 * 
	 * @return
	 */
	public static int getHomeHotelType() {
		return configHolder.getInt("home_hotel_type", 3);
	}

	/**
	 * 获取目的地下特别体验的类别配置 类别为5
	 * 
	 * @return
	 */
	public static int getDestFeatureCategorySpecial() {
		return configHolder.getInt("destFeatureCategorySpecial", 5);
	}

	/**
	 * 获取抓取评论信息的超时时间
	 * 
	 * @return
	 */
	public static int getCrawlerTimeout() {
		return configHolder.getInt("isc_crawler_timecout", 3000);
	}

	/**
	 * 获取调度的
	 * 
	 * @return
	 */
	public static long getCrawlerScheduleMills() {
		return configHolder.getLong("crawler_schedule_mills", 86400000);
	}

	/**
	 * 获取抓取的评论保留的时间天数
	 * 
	 * @return
	 */
	public static int getCrawlerReviewHoldDays() {
		return configHolder.getInt("isc_crawler_review_hold_days", 7);
	}

	/**
	 * 获取酒店评论类型
	 * 
	 * @return
	 */
	public static Map<Integer, String> getHotelReviewType() {
		String json = configHolder.getString("isc_hotel_review_type");
		Gson gson = new Gson();
		Map<Integer, String> data = gson.fromJson(json,
				new TypeToken<HashMap<Integer, String>>() {
				}.getType());
		return data;
	}

	public static boolean isEnableTempCountrySort() {
		return configHolder.getBoolean("isc_temp_country_sort_enable", false);
	}

	/**
	 * 获取首页新闻归属的特色类型Id
	 * 
	 * @return
	 */
	public static int getHomeNewsFeatureCategoryId() {
		return configHolder.getInt("home_news_feature_category_id", -1);
	}

	/**
	 * 获取首页目的地归属的特色类型Id
	 * 
	 * @return
	 */
	public static int getHomeDestFeatureCategoryId() {
		return configHolder.getInt("home_dest_feature_category_id", -2);
	}

	/**
	 * 获取首页酒店归属的特色类型Id
	 * 
	 * @return
	 */
	public static int getHomeHotelFeatureCategoryId() {
		return configHolder.getInt("home_hotel_feature_category_id", -3);
	}

	/**
	 * 获取酒店资源类型：房型
	 * 
	 * @return
	 */
	public static int getHotelResourceHouse() {
		return configHolder.getInt("hotel_resource_house", 2);
	}

	/**
	 * 获取酒店资源类型：餐厅
	 * 
	 * @return
	 */
	public static int getHotelResourceRestaurant() {
		return configHolder.getInt("hotel_resource_restaurant", 3);
	}

	/**
	 * 获取酒店资源类型：特色
	 * 
	 * @return
	 */
	public static int getHotelResourceSpecial() {
		return configHolder.getInt("hotel_resource_special", 4);
	}

	/**
	 * 手机版每页显示的记录数
	 * 
	 * @return
	 */
	public static int getMobilePageRows() {
		return configHolder.getInt("isc_mobile_page_rows", 10);
	}

	/**
	 * 获取目的地特色类别为住宿的类别Id
	 * 
	 * @return
	 */
	public static int getDestFeatureHotelCategoryId() {
		return configHolder.getInt("dest_feature_hotel_categoryId", 3);
	}

	/**
	 * 用户授权后默认跳转到地址
	 * 
	 * @return
	 */
	public static String getAuthRedirectDefaultUrl() {
		return configHolder.getString("isc_auth_redirect_default_url",
				"/views/home.do?action=viewHome");
	}

	public static String getDomainName() {
		return configHolder.getString("isc_domain_name",
				"http://www.zentravel.cn");
	}

	/**
	 * 行程线路前台页面展示的几条记录的配置
	 * 
	 * @return
	 */
	public static int getStrokeViewShowPageRows() {
		return configHolder.getInt("stroke_view_show_page_rows", 9);
	}

	/**
	 * 用户个人偏好页面展示数据记录数
	 * 
	 * @return
	 */
	public static int getAccountFavoritePageRows() {
		return configHolder.getInt("account_favorite_view_show_page_rows", 12);
	}

	/**
	 * 获取风格偏好页面显示数据记录数
	 * 
	 * @return
	 */
	public static int getStyleViewShowPageRows() {
		return configHolder.getInt("style_view_show_page_rows", 5);
	}

	/**
	 * 获取系统展示在前台中，手机版的内容最大限制长度30
	 */
	public static int getMobileContentLimit() {
		return configHolder.getInt("mobile_content_limit", 30);
	}

	/**
	 * 风格偏好下新闻详细页里推荐3条其他新闻
	 * 
	 * @return
	 */
	public static int getStyleNewsPageSize() {
		return configHolder.getInt("style_news_page_size", 3);
	}
	
	public static boolean isProduction(){
		String mode = configHolder.getString("runMode");
//		#runMode=debug/production
//		runMode=debug
		return "production".equals(mode);
	}
	
	public static String getTripPublicIP(){
		return configHolder.getString("trip_public_ip", "127.0.0.1");
	}
	
	public static void setTripPublicIP(String publicIP){
		configHolder.setStringInMemory("trip_public_ip", publicIP);
	}
}
